package com.xuelang.pipeline.client.task.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>任务实例DTO</p>
 *
 * @author : yixin.lys
 * @date : 2024-06-19 15:52
 **/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TaskInstanceDTO {

    /**
     * 主键，自增
     */
    private Long id;


    /**
     * 任务UUID
     */
    @NotEmpty(message = "任务UUID不能为空")
    private String taskUuid;


    /**
     * 前一任务UUID，若为初始任务则填0
     */
    @NotEmpty(message = "前一任务UUID不能为空")
    private String parentUuid;

    /**
     * 任务名称
     */
    @NotEmpty(message = "任务名称不能为空")
    private String name;

    /**
     * 任务实例编码
     */
    @NotEmpty(message = "任务实例编码不能为空")
    private String code;

    /**
     * 任务参数
     */
    @NotEmpty(message = "任务参数不能为空")
    private String params;

    /**
     * 任务输出
     */
    //@NotEmpty(message = "任务输出不能为空")
    private String output;

    /**
     * 排列序号
     */
    @NotNull(message = "排列序号不能为空")
    private Integer sortIndex;

    /**
     * 前端校验标识,默认为false
     */
    @NotNull(message = "前端校验标识不能为空")
    private Boolean isValidateError;

    /**
     * 任务定义schema
     */
    private String schema;

    /**
     * 创建人
     */
    private String creatorId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新人ID
     */
    private String updaterId;

    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     * 流水线实例编码
     */
    private String pipelineInstanceCode;


    /**
     * 任务状态，1运行中，2成功，3失败，4终止
     */
    private String taskStatus;

    /**
     * 开始时间
     */
    private Date startTime;

    /**
     * 结束时间
     */
    private Date endTime;

    /**
     * 操作按钮
     */
    private List<Action> action;

    /**
     * 结果提示
     */
    private List<ResultInfo> resultInfo;


    @Data
    public static class Action {
        /**
         * 类型logButton,redirect,invoke
         */
        private String actionType;
        /**
         * 名字
         */
        private String actionName;
        /**
         * 调用url
         */
        private String actionUrl;
        /**
         * 唯一标识
         */
        private String actionId;
        /**
         * 展示顺序
         */
        private Integer index;
        /**
         * 展示 icon
         */
        private String icon;
    }

    @Data
    public static class ResultInfo {
        /**
         * 类型  errorTip，bottomInfo，invoke，checkPoint
         */
        private String type;
        /**
         * 数据
         */
        private List<Map<String, String>> data;
        /**
         * 位置
         */
        private String position;
    }

}
